// loadEnv函数用于加载指定的.env文件
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
// @ts-ignore
import path from "path";

// 引入SVG插件
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
// mock插件提供方法
import { viteMockServe } from "vite-plugin-mock";

// 按需自动导入el-plus
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  // 获取各个环境参数
  let env = loadEnv(mode, process.cwd(), '');

  return {
    base: '/',
    plugins: [
      vue(),
      // SVG插件配置
      createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), "src/assets/icons")], // 配置要缓存的图标文件夹
        symbolId: "icon-[dir]-[name]", //配置执行 icon name 的格式
      }),
      // el-plus配置
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        // dirs: ['src/components'],
        // extensions: ['vue'],
        // globs: ['src/components/*.{vue}'],
        // deep: true,
        // dts: true,
        resolvers: [ElementPlusResolver()],
      }),
    ],
    css: {
      preprocessorOptions: {
        scss: {
          // javascriptEnabled: true,
          // additionalData: `@import "src/styles/variable.scss";`,
          additionalData: `@use "src/styles/variable.scss" as *;`,
          api: 'modern-compiler',
        },
      },
    },
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src'), //相对路径别名配置，使用@代替src
        // '@': path.resolve(__dirname, 'src'), //相对路径别名配置，使用@代替src
      },
    },
    // 代理跨域
    server: {
      host: "0.0.0.0",
      proxy: {
        [env.VITE_APP_BASE_API]: {
          // 获取服务器代理地址
          target: env.VITE_SERVE,
          // 是否开启跨域
          changeOrigin: true,
          // 是否重写地址，即把api的本地路由重写成和服务器匹配的路由
          rewrite: (path) => path.replace(/^\/api/,''),
        },
      },
    },
    define: {
      'process.env.NODE_ENV': JSON.stringify(mode === 'production' ? 'production' : 'development'),
    },
    // build配置
    build: {
      base: '',
      outDir: 'dist',
      terserOptions: {
        compress: {
          drop_console: true, // 移除 console 语句
          unused: true, // 移除未使用的变量和函数
          drop_debugger: true, // 移除 debugger 语句
          pure_funcs: ['console.log'],
          toplevel: true, // 启用顶级代码压缩
        },
        output: {
          comments: false, // 忽略注释
        }
      },
      sourcemap: true,
      rollupOptions: {
        // 忽略文件
        external: ['external-package'], // 外部化依赖
        input: {
          main: path.resolve(__dirname, 'index.html'),
        },
        // 指定输出的公共路径
        output: {
          // chunk 文件（如 vendor.js）的输出路径
          chunkFileNames: 'assets/js/[name]-[hash].js',
          // 入口文件（如 main.js）的输出路径
          entryFileNames: 'assets/js/[name]-[hash].js',
          // 静态资源（如 CSS、图片）的输出路径
          assetFileNames: 'assets/css/[name]-[hash][extname]',
        },
      },
      minify: 'terser',
      chunkSizeWarningLimit: 1000000 // bytes, e.g., 1 MB
    },
  };
});
